package online.longzipeng.mywebdemo;

import cn.hutool.core.collection.CollUtil;
import online.longzipeng.mywebdemo.entity.User;

import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

/**
 * @Author: lzp
 * @description: 常用Stream流演示
 * @Date: 2022/9/20
 */
public class StreamDemo {

	public static void main(String[] args) {
		List<User> users = CollUtil.newArrayList(
				User.builder().userName("小龙").id(1).age(23).sex(1).build(),
				User.builder().userName("老王").id(2).age(33).sex(1).build(),
				User.builder().userName("小白").id(3).age(23).sex(2).build(),
				User.builder().userName("李华").id(4).age(23).sex(2).build(),
				User.builder().userName("韩梅梅").id(5).age(18).sex(2).build(),
				User.builder().userName("大头").id(6).age(25).sex(1).build(),
				User.builder().userName("张飞").id(7).age(25).sex(1).build()
		);
		/// .map 取出id集合
		List<Integer> ids = users.stream().map(User::getId).collect(Collectors.toList());
		System.out.println("=====================ids为==================================");
		System.out.println(ids);

		/// .filter 年龄小于25的
		List<User> users2 = users.stream().filter(u -> u.getAge() < 25).collect(Collectors.toList());
		System.out.println("=====================年龄小于25==================================");
		System.out.println(users2);

		/// 按age分组
		Map<Integer, List<User>> map1 = users.stream().collect(Collectors.groupingBy(User::getAge));
		System.out.println("=====================按age分组==================================");
		System.out.println(map1);

		/// 按age分组，只留id最大的那一个 k v 形式
		Map<Integer, User> map2 = users.stream().collect(Collectors.toMap(User::getAge, o -> o, (o1, o2) -> o1.getId() > o2.getId() ? o1 : o2));
		System.out.println("=====================按age分组，只留id最大的那一个 k v 形式==================================");
		System.out.println(map2);
		/// 年龄小于25的 id集合
		List<Integer> ids2 = users.stream().filter(u -> u.getAge() < 25).map(User::getId).collect(Collectors.toList());
	}
}
